package problems.daily.y2021m7;

import java.util.Arrays;

/**
 * @author habitplus
 * @since 2021-07-14 20:54
 */
public class T20210714N3 {
    // 283. 移动零
    // 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
    // 说明:
    //      必须在原数组上操作，不能拷贝额外的数组。
    //      尽量减少操作次数。
    public void moveZeroes(int[] nums) {
        // 双指针
        int n = nums.length, left = 0, right = 0;
        while (right < n) {
            if (nums[right] != 0) {
                if (right != left) swap(nums, left, right);
                left++;
            }
            right++;
        }
    }

    private void swap(int[] arr, int i, int j) {
        int t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }

    public static void main(String[] args) {
        int[] arr = {0,1,0,3,12};
        new T20210714N3().moveZeroes(arr);
        System.out.println(Arrays.toString(arr));
    }
}
